#include <stdio.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    //打开文件
    FILE * file =  fopen("io.txt","a+");
    if(file == NULL)
    {
        printf("打开失败...\n");
    }
    else
    {
        printf("打开成功...\n");
    }


    /**
 * 作用：读取文件中的一个字符
 * 参数：文件流
 * 返回值：成功：得到字符的数值，文件结尾或失败：EOF
 * 
 * int fgetc (FILE *__stream);
 * */
    // 从文件中读取一个字符
    int fgetc_result = fgetc(file);
    if(fgetc_result == EOF)
    {
        printf("读字符失败...\n");
    }
    else
    {
        printf("读取字符%c成功...\n",fgetc_result);
    }


    /**
 * 作用：读取文件中的字符串（指定长度）
 * 参数1：接收读取数据的字符数组
 * 参数2：读取的长度
 * 参数3：文件流
 * 返回值：
 *  成功：读取的字符串   当读取到换行会自动结束返回
 *  文件末尾或失败：NULL
 * 
 * char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
 * */
    // 从文件中读取字符串 (不断读取完)
    char buff[30];  //存数据的数组
    while(fgets(buff,sizeof(buff),file))
    {
        printf("%s",buff);
        memset(buff,0,30);
    }
    printf("\n");


/**
 * 作用：读取文件中的一行字符串，格式化到n个变量中
 * 参数1：文件流
 * 参数2：带点位的字符串（匹配要读取的字符串）
 * 参数...：用于接收匹配占位数据的n个变量指针
 * 返回值：成功：点位的个数，失败或结束返回EOF
 * 
 * int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...)
 * */ 
    char name1[10];
    char name2[10];
    int age;
    while(fscanf(file,"%s %s %d",name1,name2,&age) != EOF)
    {
        printf("%s在%d的时候爱上了%s\n",name1,age,name2);
    }




    //关闭文件
    int result = fclose(file);
    if(result == EOF)
    {
        printf("关闭文件失败。。。\n");
    }
    else
    {
        printf("关闭文件文件成功...\n");
    }
    return 0;
}


